package cashpointer.core.dao;

import cashpointer.core.model.Cashpoint;
import java.util.List;
import java.util.Map;

/**
 * Interfejs obslugi operacji bazodanowych na tabeli Cashpoint.
 * @author wojciech topolski
 * @version 2009-04-06
 */
public interface CashpointDao {
    /**
     * Funkcja dodaje nowego badz aktualizuje juz istniejacy bankomat.
     * @param cashpoint Cashpoint
     */
	public void save(Cashpoint cashpoint);

    /**
     * Funkcja usuwa bankomat.
     * @param cashpoint Cashpoint
     */
	public void delete(Cashpoint cashpoint);

    /**
     * Funkcja pobiera bankomat za pomoca jego id.
     * @param id Long
     */
    public Cashpoint getById(Long id);

    /**
     * Funkcja pobiera bankomat za pomoca jego hashCode.
     * @param id int
     */
    public Cashpoint getByHashCode(int hashCode);

    /**
     * Funkcja pobiera liste bankomatow gdzie wersja START jest rowna z podana.
     * Wersja STOP musi byc null.
     * @param start String
     * @return List<Cashpoint>
     */
    public List<Cashpoint> getByStart(String start);

    /**
     * Funkcja pobiera liste bankomatow gdzie wersja STOP jest rowna z podana.
     * Wersja START musi byc wypelniona
     * @param  stop String
     * @return List<Cashpoint>
     */
    public List<Cashpoint> getByStop(String stop);

    /**
     * Funkcja pobiera liste bankomatow gdzie wersja STOP jest null.
     * Wersja START musi byc wypelniona. Czyli wszystkie aktywne.
     * @return List<Cashpoint>
     */
    public List<Cashpoint> getAllActive();

    /**
     * Funkcja pobiera liste wszystkie bankomaty.
     * @return List<Cashpoint>
     */
    public List<Cashpoint> getAll();

    /**
     * Funkcja zapisuje lite bankomatow do bazy danych.
     * @param owners List<Cashpoint>
     */
    public void saveAll(List<Cashpoint> owners);

    /**
     * Funkcja pobiera mape z identyfikatorami i hashcodami bankomatow.
     * @return List<Cashpoint>
     */
    public Map<Integer, Integer> getAllHashCodes();

    /**
     * Funkcja wykonuje rollback podanej wersji.
     */
    public void rollback(String version);
}
